home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Graphics Programming (2nd Edition) / Visual Basic Graphics Programming 2nd Edition.iso / Src / Ch10 / BinTree2.frm (.txt) < prev    next >
Visual Basic Form  |  1999-06-08  |  5KB  |  152 lines

  1. VERSION 5.00
  2. Begin VB.Form frmBinTree2 
  3.    Caption         =   "BinTree2"
  4.    ClientHeight    =   4335
  5.    ClientLeft      =   1095
  6.    ClientTop       =   990
  7.    ClientWidth     =   7470
  8.    LinkTopic       =   "Form1"
  9.    PaletteMode     =   1  'UseZOrder
  10.    ScaleHeight     =   4335
  11.    ScaleWidth      =   7470
  12.    Begin VB.CheckBox chkTaper 
  13.       Caption         =   "Taper Branches"
  14.       Height          =   255
  15.       Left            =   240
  16.       TabIndex        =   3
  17.       Top             =   1200
  18.       Width           =   1455
  19.    End
  20.    Begin VB.TextBox txtDTheta 
  21.       Height          =   285
  22.       Left            =   1320
  23.       MaxLength       =   3
  24.       TabIndex        =   2
  25.       Text            =   "36"
  26.       Top             =   720
  27.       Width           =   615
  28.    End
  29.    Begin VB.TextBox txtLengthScale 
  30.       Height          =   285
  31.       Left            =   1320
  32.       MaxLength       =   5
  33.       TabIndex        =   1
  34.       Text            =   "0.75"
  35.       Top             =   360
  36.       Width           =   615
  37.    End
  38.    Begin VB.PictureBox picCanvas 
  39.       AutoRedraw      =   -1  'True
  40.       Height          =   4335
  41.       Left            =   2040
  42.       ScaleHeight     =   285
  43.       ScaleMode       =   3  'Pixel
  44.       ScaleWidth      =   357
  45.       TabIndex        =   6
  46.       Top             =   0
  47.       Width           =   5415
  48.    End
  49.    Begin VB.CommandButton cmdGo 
  50.       Caption         =   "Go"
  51.       Default         =   -1  'True
  52.       Height          =   375
  53.       Left            =   720
  54.       TabIndex        =   4
  55.       Top             =   1680
  56.       Width           =   615
  57.    End
  58.    Begin VB.TextBox txtDepth 
  59.       Height          =   285
  60.       Left            =   1320
  61.       MaxLength       =   3
  62.       TabIndex        =   0
  63.       Text            =   "5"
  64.       Top             =   0
  65.       Width           =   615
  66.    End
  67.    Begin VB.Label Label3 
  68.       Caption         =   "DTHETA"
  69.       Height          =   255
  70.       Left            =   0
  71.       TabIndex        =   8
  72.       Top             =   720
  73.       Width           =   735
  74.    End
  75.    Begin VB.Label Label2 
  76.       Caption         =   "LENGTH_SCALE"
  77.       Height          =   255
  78.       Left            =   0
  79.       TabIndex        =   7
  80.       Top             =   360
  81.       Width           =   1335
  82.    End
  83.    Begin VB.Label Label1 
  84.       Caption         =   "Depth"
  85.       Height          =   255
  86.       Left            =   0
  87.       TabIndex        =   5
  88.       Top             =   0
  89.       Width           =   495
  90.    End
  91. Attribute VB_Name = "frmBinTree2"
  92. Attribute VB_GlobalNameSpace = False
  93. Attribute VB_Creatable = False
  94. Attribute VB_PredeclaredId = True
  95. Attribute VB_Exposed = False
  96. Option Explicit
  97. Private Const PI = 3.14159
  98. ' Recursively draw a binary tree branch.
  99. Private Sub DrawBranch(ByVal thickness As Single, ByVal depth As Integer, ByVal X As Single, ByVal Y As Single, ByVal length As Single, ByVal length_scale As Single, ByVal theta As Single, ByVal dtheta As Single)
  100. Dim x1 As Single
  101. Dim y1 As Single
  102. Dim status As Integer
  103.     ' See where this branch should end.
  104.     x1 = X + length * Cos(theta)
  105.     y1 = Y + length * Sin(theta)
  106.     If thickness > 0 Then picCanvas.DrawWidth = thickness
  107.     picCanvas.Line (X, Y)-(x1, y1)
  108.     ' If depth > 1, draw the attached branches.
  109.     If depth > 1 Then
  110.         DrawBranch thickness - 1, depth - 1, _
  111.             x1, y1, length * length_scale, _
  112.             length_scale, theta + dtheta, dtheta
  113.         DrawBranch thickness - 1, depth - 1, _
  114.             x1, y1, length * length_scale, _
  115.             length_scale, theta - dtheta, dtheta
  116.     End If
  117. End Sub
  118. Private Sub cmdGo_Click()
  119. Dim taper As Integer
  120. Dim depth As Integer
  121. Dim dtheta As Single
  122. Dim length As Single
  123. Dim length_scale As Single
  124.     picCanvas.Cls
  125.     MousePointer = vbHourglass
  126.     DoEvents
  127.     If Not IsNumeric(txtDepth.Text) Then txtDepth.Text = "5"
  128.     depth = CInt(txtDepth.Text)
  129.     If Not IsNumeric(txtLengthScale.Text) Then txtLengthScale.Text = "0.75"
  130.     length_scale = CSng(txtLengthScale.Text)
  131.     If Not IsNumeric(txtDTheta.Text) Then txtDTheta.Text = "36"
  132.     dtheta = CSng(txtDTheta.Text) * PI / 180#
  133.     If chkTaper.Value = vbChecked Then
  134.         taper = depth
  135.     Else
  136.         taper = 0
  137.     End If
  138.     length = (picCanvas.ScaleHeight - 10) / _
  139.         ((1 - length_scale ^ (depth + 1)) / (1 - length_scale))
  140.     DrawBranch taper, depth, _
  141.         picCanvas.ScaleWidth \ 2, _
  142.         picCanvas.ScaleHeight - 5, length, _
  143.         length_scale, -PI / 2, dtheta
  144.     MousePointer = vbDefault
  145. End Sub
  146. Private Sub Form_Resize()
  147. Dim wid As Single
  148.     wid = ScaleWidth - picCanvas.Left
  149.     If wid < 120 Then wid = 120
  150.     picCanvas.Move picCanvas.Left, 0, wid, ScaleHeight
  151. End Sub
  152.